package day230404;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/4/6 11:16
 */
public class Gloves {

    public int findMinimum(int n, int[] left, int[] right) {
        // 4 left[2, 7, 1, 6] right[1, 5, 2, 6]
        // left 中每种颜色一定都拿一次的最小可能  2 + 7 + 6 + 1 - 7 + 1 即 leftSum - minLeft + 1
        // right 中每种颜色一定都拿一次的最小可能 1 + 5 + 2 + 6 - 6 + 1 即 rightSum - minRight + 1
        // 最少需要拿的次数为拿完左右手之一再拿一个左手或者右手，能保证至少拿到同一个颜色
        int leftSum = 0;
        int rightSum = 0;
        int minLeft = Integer.MAX_VALUE;
        int minRight = Integer.MAX_VALUE;
        int zero = 0; // 因为 0 额外需要把另一边的手套相应的个数拿完
        for (int i = 0; i < n; i++) {
            if (left[i] * right[i] == 0) {
                // 其中一边有0, 则拿完另一边对应颜色的手套
                zero += left[i] + right[i];
            } else {
                leftSum += left[i];
                rightSum += right[i];
                minLeft = Math.min(minLeft, left[i]);
                minRight = Math.min(minRight, right[i]);
            }
        }
        return Math.min(leftSum - minLeft + 1, rightSum - minRight+ 1) + 1 + zero;
    }
}
